#!/bin/bash
# === 配置项 ===
THRESHOLD_CPU=80  # CPU 使用率阈值
THRESHOLD_MEM=80  # 内存使用率阈值
THRESHOLD_DISK=90  # 磁盘使用率阈值
SERVICES=("nginx" "mysql" "redis")  # 需要检查的关键服务

# === 颜色定义 ===
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
RESET=$(tput sgr0)

# === 获取系统信息 ===
HOSTNAME=$(hostname)
UPTIME=$(uptime -p)
CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')
MEMORY_USAGE=$(free | awk '/Mem/ {printf "%.2f", $3/$2 * 100}')
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
IP_ADDR=$(hostname -I | awk '{print $1}')

# === 健康状态检测 ===
REPORT="📋 **服务器健康报告 - $(date)**\n\n"
REPORT+="📌 **主机名**：$HOSTNAME\n"
REPORT+="🌐 **IP地址**：$IP_ADDR\n"
REPORT+="⏳ **运行时间**：$UPTIME\n\n"

# CPU 负载
if (( $(echo "$CPU_LOAD > $THRESHOLD_CPU" | bc -l) )); then
    REPORT+="❌ **CPU使用率：$CPU_LOAD%（过高！）**\n"
    CPU_STATUS="${RED}$CPU_LOAD%（高）${RESET}"
else
    REPORT+="✅ **CPU使用率：$CPU_LOAD%**\n"
    CPU_STATUS="${GREEN}$CPU_LOAD%（正常）${RESET}"
fi

# 内存占用
if (( $(echo "$MEMORY_USAGE > $THRESHOLD_MEM" | bc -l) )); then
    REPORT+="❌ **内存使用率：$MEMORY_USAGE%（过高！）**\n"
    MEM_STATUS="${RED}$MEMORY_USAGE%（高）${RESET}"
else
    REPORT+="✅ **内存使用率：$MEMORY_USAGE%**\n"
    MEM_STATUS="${GREEN}$MEMORY_USAGE%（正常）${RESET}"
fi

# 磁盘占用
if (( "$DISK_USAGE" > "$THRESHOLD_DISK" )); then
    REPORT+="❌ **磁盘使用率：$DISK_USAGE%（空间不足！）**\n"
    DISK_STATUS="${RED}$DISK_USAGE%（高）${RESET}"
else
    REPORT+="✅ **磁盘使用率：$DISK_USAGE%**\n"
    DISK_STATUS="${GREEN}$DISK_USAGE%（正常）${RESET}"
fi

# 关键服务检查（先判断是否已安装）
REPORT+="\n🚀 **关键服务状态**\n"
SERVICE_STATUS=""
for SERVICE in "${SERVICES[@]}"; do
    if systemctl list-units --type=service --all | grep -q "$SERVICE"; then
        if systemctl is-active --quiet "$SERVICE"; then
            REPORT+="✅ **$SERVICE：运行中**\n"
            SERVICE_STATUS+="${GREEN}$SERVICE（运行）${RESET}  "
        else
            REPORT+="❌ **$SERVICE：未运行！**\n"
            SERVICE_STATUS+="${RED}$SERVICE（异常）${RESET}  "
        fi
    else
        REPORT+="⚠️ **$SERVICE 未安装或未找到**\n"
        SERVICE_STATUS+="${YELLOW}$SERVICE（未安装）${RESET}  "
    fi
done

# === 终端输出 ===
echo -e "📋 服务器健康报告\n"
echo -e "📌 主机名：$HOSTNAME"
echo -e "🌐 IP地址：$IP_ADDR"
echo -e "⏳ 运行时间：$UPTIME\n"
echo -e "🖥  CPU使用率：$CPU_STATUS"
echo -e "💾 内存使用率：$MEM_STATUS"
echo -e "🗄  磁盘使用率：$DISK_STATUS"
echo -e "🔍 服务状态：$SERVICE_STATUS"